# -*- coding: utf-8 -*-

 ###############################################
 ##                                             ##
 ##   Herramientas                               ##
 ##                                              ##
 ##                                              ##
 ##                                              ##
 ##   por Críptidos Digitales                    ##
 ##   GPL (c)2008                                ##
  ##                                             ##
    ###############################################

from PyQt4 import QtCore, QtGui
import os
import herramientas_ui

from cdWidgets import cdSlideFrame

import man as manejador

import access



class Forma(QtGui.QFrame):

    @property
    def app(self):
        return self.__app

    @property
    def eventRouter(self):
        return self.__eventRouter

    @property
    def owner(self):
        return self.__owner


    def __init__(self, *args, **kwds):
        QtGui.QFrame.__init__(self, *args)

        if kwds.has_key('app'):
            self.__app = kwds.pop('app')
        else:
            self.__app = {}

        if 'eventRouter' in kwds.keys():
            self.__eventRouter = kwds.pop('eventRouter')
        else:
            self.__eventRouter = None

        if kwds.has_key('owner'):
            self.__owner = kwds.pop('owner')
        else:
            self.__owner = None

        self.ui = herramientas_ui.Ui_Form()
        self.ui.setupUi(self)

        font = QtGui.QFont()
        font.setBold(True)
        font.setPointSize(9)

        self.ui.title.setText(u"HERRAMIENTAS")
        self.ui.title.setStyleSheet("background-color:#F8F8F8;")

        self.ui.frGeneral.setStyleSheet("""#frGeneral{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        ## Ubicación de documentos
        self.ui.frRutaDocumentos.setStyleSheet("""#frRutaDocumentos{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            font: bold;
            }""")
        self.ui.laRutaDocumentos.setStyleSheet("color:#5F0000; background-color:#E0E0C0;")
        self.ui.edRutaDocumentos.setText(manejador.atributoI(grupo=u'sistema', nombre=u'rutaDocumentos').valor)
        self.connect(self.ui.boRutaDocumentos, QtCore.SIGNAL('clicked()'), self.showPath)

        ## Ubicacion de datos
        #~ self.ui.edRuta.setText(self.app.config.pull('properties', 'ubicacion'))
        #~ self.connect(self.ui.boRuta, QtCore.SIGNAL('clicked()'), self.muestraDialogo)

        ## Mostrar tips al inicio
        if manejador.atributoI(grupo=u'sistema', nombre=u'mostrarTips').valor==u"1":
            self.ui.chMostrarTips.setChecked(True)
        else:
            self.ui.chMostrarTips.setChecked(False)
        self.connect(self.ui.chMostrarTips, QtCore.SIGNAL('stateChanged(int)'), self.toggleMostrarTips)

        self.ui.laDecimales.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")

        ## Lugar default
        self.ui.laLugar.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")
        self.ui.cbLugarDefault.clear()
        for lugar in manejador.lugares():
            self.ui.cbLugarDefault.addItem(lugar.nombre, QtCore.QVariant(lugar.code))
        default = manejador.atributoI(grupo=u'lugar', valor=u'default')
        if default.valor:
            self.ui.cbLugarDefault.setCurrentIndex(self.ui.cbLugarDefault.findData(QtCore.QVariant(int(default.code))))
        self.connect(self.ui.cbLugarDefault, QtCore.SIGNAL('currentIndexChanged(int)'), self.lugarDefaultChanged)

        ## Proteccion F10
        if manejador.atributoI(grupo=u'sistema', nombre=u'proteccionF10').valor:
            self.ui.chF10.setChecked(True)
        else:
            self.ui.chF10.setChecked(False)
        self.connect(self.ui.chF10,QtCore.SIGNAL('stateChanged(int)'), self.toggleProteccionF10)

        self.ui.frContrasenas.setStyleSheet("""#frContrasenas{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        self.ui.laContrasenas.setStyleSheet("""#laContrasenas{
            border-width: 0px;
            border-top-left-radius: 9px;
            border-top-right-radius: 9px;
            color:#5F0000;
            background-color:#E0E0C0;
            }""")


        ## Contraseñas
        self.connect(self.ui.boContrasena, QtCore.SIGNAL('clicked()'), self.cambiarContrasena)

        self.chContrasenaChecked = False
        if manejador.atributoI(grupo=u'sistema', nombre=u'contrasenaHerramientas').valor:
            self.ui.chContrasenaHerramientas.setChecked(True)
            self.chContrasenaChecked = True
        else:
            self.ui.chContrasenaHerramientas.setChecked(False)
        self.connect(self.ui.chContrasenaHerramientas, QtCore.SIGNAL('stateChanged(int)'), self.toggleContrasenaHerramientas)

        if manejador.atributoI(grupo=u'sistema', nombre=u'contrasenaMantenimiento').valor:
            self.ui.chContrasenaMantenimiento.setChecked(True)
            self.chContrasenaChecked = True
        else:
            self.ui.chContrasenaMantenimiento.setChecked(False)
        self.connect(self.ui.chContrasenaMantenimiento, QtCore.SIGNAL('stateChanged(int)'), self.toggleContrasenaMantenimiento)

        self.connect(self.ui.boHerramientasMantenimiento, QtCore.SIGNAL('clicked()'), self.cambiarHerramientasMantenimiento)
        if self.chContrasenaChecked:
            self.ui.boHerramientasMantenimiento.setEnabled(True)
        else:
            self.ui.boHerramientasMantenimiento.setEnabled(False)

        # self.ui.tabCuentas.setStyleSheet("""background-color: #E0E0C0;""")

        self.ui.frCuentas.setStyleSheet("""#frCuentas{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        self.ui.laCuentas.setStyleSheet("""#laCuentas{
            border-width: 0px;
            border-top-left-radius: 9px;
            border-top-right-radius: 9px;
            color:#5F0000;
            background-color:#E0E0C0;
            }""")

        self.ui.listaCuentas.setStyleSheet("""#listaCuentas{
            border-style: solid;
            border-width: 1px;
            border-top-color: #A0A0A0;
            border-left-color: #A0A0A0;
            border-right-color: #FFFFFF;
            border-bottom-color: #FFFFFF;
            background-color: #FFFFE0;
            }""")

        ## Cuentas - Quitar
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Minus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aEliminar = QtGui.QAction(icon, u"Eliminar", self)
        self.aEliminar.setCheckable(True)
        self.aEliminar.setIconText(u"&Eliminar")
        self.connect(self.aEliminar, QtCore.SIGNAL("triggered()"), self.eliminaCuenta)

        self.ui.toQuitarCuenta.setDefaultAction(self.aEliminar)
        self.ui.toQuitarCuenta.setIconSize(QtCore.QSize(32, 32))
        self.ui.toQuitarCuenta.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)

        ## Cuentas - Modificar
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Redo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aModificar = QtGui.QAction(icon, u"Modificar", self)
        self.aModificar.setCheckable(True)
        self.aModificar.setIconText(u"&Modificar")
        self.connect(self.aModificar, QtCore.SIGNAL("triggered()"), self.modificaCuenta)

        self.ui.toModificarCuenta.setDefaultAction(self.aModificar)
        self.ui.toModificarCuenta.setIconSize(QtCore.QSize(32, 32))
        self.ui.toModificarCuenta.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)

        ## Cuentas - Agregar
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Plus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aAgregar = QtGui.QAction(icon, u"Agregar", self)
        self.aAgregar.setCheckable(True)
        self.aAgregar.setIconText(u"&Agregar")
        self.connect(self.aAgregar, QtCore.SIGNAL("triggered()"), self.agregaCuenta)

        self.ui.toAgregarCuenta.setDefaultAction(self.aAgregar)
        self.ui.toAgregarCuenta.setIconSize(QtCore.QSize(32, 32))
        self.ui.toAgregarCuenta.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)

        # self.connect(self.ui.edCuenta, QtCore.SIGNAL('editingFinished()'), self.cuentaCapturada)

        self.ui.laBanco.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")
        self.ui.cbBanco.setFont(font)
        self.ui.cbBanco.setStyleSheet("color:#5F0000;")

        self.ui.laNumero.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")
        self.ui.edCuenta.setFont(font)
        self.ui.edCuenta.setStyleSheet("color:#5F0000;")

        self.cargaBancos()

        self.cargaCuentas()

        # self.ui.frameCapturaCuenta.hide()

        self.ui.frProductos.setStyleSheet("""#frProductos{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        ## Productos - Captura de Clasificación Obligatoria
        self.ui.chCapturaClasificacionObligatoria.setFont(font)
        if manejador.atributoI(grupo=u'producto', nombre=u'capturaClasificacionObligatoria').valor=="1":
            self.ui.chCapturaClasificacionObligatoria.setChecked(True)
        else:
            self.ui.chCapturaClasificacionObligatoria.setChecked(False)
        self.connect(self.ui.chCapturaClasificacionObligatoria, QtCore.SIGNAL('stateChanged(int)'), self.toggleCapturaClasificacionObligatoria)

        ## Productos - Captura de Linea Habilitada
        self.ui.chCapturaLinea.setFont(font)
        if manejador.atributoI(grupo=u'producto', nombre=u'capturaLineaHabilitada').valor:
            self.ui.chCapturaLinea.setChecked(True)
        else:
            self.ui.chCapturaLinea.setChecked(False)
        self.connect(self.ui.chCapturaLinea, QtCore.SIGNAL('stateChanged(int)'), self.toggleCapturaLinea)

        ## Productos - Captura de Inventario Actual Permitida
        self.ui.chCapturaActualPermitida.setFont(font)
        if manejador.atributoI(grupo=u'producto', nombre=u'capturaActualPermitida').valor==u"1":
            self.ui.chCapturaActualPermitida.setChecked(True)
        else:
            self.ui.chCapturaActualPermitida.setChecked(False)
        self.connect(self.ui.chCapturaActualPermitida, QtCore.SIGNAL('stateChanged(int)'), self.toggleCapturaActualPermitida)

        ## Productos - Usar codigo secundario
        if manejador.atributoI(grupo=u'producto', nombre=u'usarCódigoSecundario').valor==u'1':
            self.ui.chUsarCodigoSecundario.setChecked(True)
        else:
            self.ui.chUsarCodigoSecundario.setChecked(False)
        self.connect(self.ui.chUsarCodigoSecundario, QtCore.SIGNAL('stateChanged(int)'), self.toggleUsarCodigoSecundario)

        ## Productos - Tipo default en Captura
        self.ui.laTipoDefaultProducto.setFont(font)
        self.ui.laTipoDefaultProducto.setStyleSheet("color:#5F0000; background-color:#FFFFE0;")
        self.ui.cbTipoProducto.setFont(font)
        self.ui.cbTipoProducto.setStyleSheet("color:#5F0000; background-color:#FFFFFF;")
        self.connect(self.ui.cbTipoProducto, QtCore.SIGNAL('activated(int)'), self.changeTipoProductoDefault)

        self.cargaTiposProducto()
        self.ui.cbTipoProducto.setCurrentIndex(self.ui.cbTipoProducto.findData(QtCore.QVariant(int(manejador.atributoI(grupo=u'tipoProducto', valor=u'default').id))))

        ## Productos - tipos de Precio
        self.ui.frPrecios.setStyleSheet("""#frPrecios{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")

        self.ui.laPrecios.setStyleSheet("""#laPrecios{
            border-width: 0px;
            border-top-left-radius: 9px;
            border-top-right-radius: 9px;
            color:#5F0000;
            background-color:#E0E0C0;
            }""")

        rangos = manejador.atributosI(grupo=u'rangoPrecioProducto', order=u'referencia')

        font = QtGui.QFont()
        font.setWeight(50)
        font.setBold(False)

        self.ui.priceTypeCH = []
        self.ui.priceTypeED = []

        for index, rango in enumerate(rangos):

            horizontalLayout = QtGui.QHBoxLayout()
            horizontalLayout.setSpacing(0)
            horizontalLayout.setContentsMargins(3, -1, -1, -1)

            self.ui.priceTypeCH.append(QtGui.QCheckBox(self.ui.frTiposPrecio))
            self.ui.priceTypeCH[index].setFont(font)
            self.ui.priceTypeCH[index].setObjectName("priceTypeCH")

            if rango.referencia[1]==u'a':
                self.ui.priceTypeCH[index].setChecked(True)

            self.ui.priceTypeCH[index].data = rango.id

            self.connect(self.ui.priceTypeCH[index], QtCore.SIGNAL('stateChanged(int)'), self.changedStateTipoPrecio)

            horizontalLayout.addWidget(self.ui.priceTypeCH[index])

            self.ui.priceTypeED.append(QtGui.QLineEdit(self.ui.frTiposPrecio))
            self.ui.priceTypeED[index].setFrame(False)
            self.ui.priceTypeED[index].setFont(font)
            self.ui.priceTypeED[index].setReadOnly(True)
            self.ui.priceTypeED[index].setObjectName("priceTypeED")

            self.ui.priceTypeED[index].setText(rango.nombre)
            self.ui.priceTypeED[index].data = QtCore.QVariant(rango.id)

            self.connect(self.ui.priceTypeED[index], QtCore.SIGNAL('editingFinished()'), self.changedNameTipoPrecio)

            horizontalLayout.addWidget(self.ui.priceTypeED[index])

            self.ui.lyTiposPrecio.insertLayout(index, horizontalLayout)








            # self.ui.priceTypeCH.append(QtGui.QCheckBox(self.frTiposPrecio))
            # self.ui.priceTypeCH[index].setFont(font)
            # self.ui.priceTypeCH[index].setAlignment(QtCore.Qt.AlignCenter)
            # self.ui.lyTiposPrecio.insertWidget(index, self.ui.priceTypeCH[index])

            # self.ui.priceTypeCH[index].setText(rango.nombre)
            # self.ui.priceTypeCH[index].data = QtCore.QVariant(rango.id)

            # self.connect(self.ui.priceTypeCH[index], QtCore.SIGNAL('stateChanged(state)'), self.changedStateTipoPrecio)


            # self.ui.priceTypeCH = QtGui.QCheckBox(self.frTiposPrecio)
            # self.ui.priceTypeCH.setObjectName("priceTypeCH")

            # self.ui.lyTiposPrecio.addWidget(self.priceTypeCH)



            # self.ui.edRangosPrecio.append(QtGui.QLineEdit(self.ui.frTiposPrecio))
            # self.ui.edRangosPrecio[index].setFont(font)
            # self.ui.edRangosPrecio[index].setAlignment(QtCore.Qt.AlignCenter)
            # self.ui.lyTiposPrecio.insertWidget(index, self.ui.edRangosPrecio[index])

            # self.ui.edRangosPrecio[index].setText(rango.nombre)
            # self.ui.edRangosPrecio[index].data = QtCore.QVariant(rango.id)

            # self.connect(self.ui.edRangosPrecio[index], QtCore.SIGNAL('editingFinished()'), self.tipoPrecioModificado)


        # for index, rango in enumerate(manejador.atributosI(grupo=u'rangoPrecioProducto', order=u'referencia')):
            # exec('''self.ui.chRangoPrecio%s.setText("%s")''' % (index+1, rango.valor))
            # exec('''self.ui.chRangoPrecio%s.rango = rango''' % (index+1))
            # if rango.referencia[1]==u'a':
                # exec('''self.ui.chRangoPrecio%s.setChecked(True)''' % (index+1))
            # exec('''self.connect(self.ui.chRangoPrecio%s, QtCore.SIGNAL('stateChanged(int)'), self.rangosPrecioChanged)''' % (index+1))


        ## Productos - Recálculo de precios al comprar
        recalcular = manejador.atributoI(grupo=u'producto', nombre=u'recalcularPrecioAlComprar').valor == u'1'
        sentido = manejador.atributoI(grupo=u'producto', nombre=u'sentidoDeCambio').valor
        margen = manejador.atributoI(grupo=u'producto', nombre=u'margenDeCambio').valor

        self.ui.chRecalcularPrecio.setChecked(recalcular)
        if sentido == u'+/-':
            self.ui.raMasMenos.setChecked(True)
        elif sentido == u'+':
            self.ui.raMas.setChecked(True)

        self.ui.spPorcentaje.setValue(int(margen))

        self.connect(self.ui.chRecalcularPrecio, QtCore.SIGNAL('toggled(bool)'), self.toggleRecalcular)
        self.connect(self.ui.raMasMenos, QtCore.SIGNAL('toggled(bool)'), self.sentidoChanged)
        self.connect(self.ui.spPorcentaje, QtCore.SIGNAL('valueChanged(int)'), self.porcentajeChanged)
        # self.connect(self.ui.grSentido, QtCore.SIGNAL('buttonClicked(QAbstractButton)'), self.sentidoChanged)

        ## Ventas
        self.ui.frVentas.setStyleSheet("""#frVentas{
            border-style: solid;
            border-width: 1px;
            border-radius: 9px;
            border-bottom-color: #A0A0A0;
            border-right-color: #A0A0A0;
            border-left-color: #FFFFFF;
            border-top-color: #FFFFFF;
            background-color: #F0F0D0;
            }""")


        ## Ventas - Captura de Pago Obligatoria
        self.ui.chCapturaPagoObligatoria.setFont(font)
        if manejador.atributoI(grupo=u'venta', nombre=u'capturaPagoObligatoria').valor:
            self.ui.chCapturaPagoObligatoria.setChecked(True)
        else:
            self.ui.chCapturaPagoObligatoria.setChecked(False)
        self.connect(self.ui.chCapturaPagoObligatoria, QtCore.SIGNAL('stateChanged(int)'), self.toggleCapturaPagoObligatoria)

        ## Ventas - Se imprime comprobante
        self.ui.chSeImprimeComprobante.setFont(font)
        if manejador.atributoI(grupo=u'venta', nombre=u'seImprimeComprobante').valor:
            self.ui.chSeImprimeComprobante.setChecked(True)
        else:
            self.ui.chSeImprimeComprobante.setChecked(False)
        self.connect(self.ui.chSeImprimeComprobante, QtCore.SIGNAL('stateChanged(int)'), self.toggleSeImprimeComprobante)

        ## Ventas - Seleccion de producto
        self.ui.laSeleccionProducto.setFont(font)
        self.ui.laSeleccionProducto.setStyleSheet("color:#5F0000; background-color: #FFFFE0;")

        if manejador.atributoI(grupo=u'venta', nombre=u'focusEnSeleccionDeProducto').valor==u'0':
            self.ui.raFocusCodigo.setChecked(True)
        else:
            self.ui.raFocusNombre.setChecked(True)

        ## Configuracion General
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Edit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aGenerales = QtGui.QAction(icon, u"Generales", self)
        self.aGenerales.setCheckable(True)
        self.aGenerales.setIconText(u"&Configuración\nGeneral")
        self.connect(self.aGenerales, QtCore.SIGNAL("triggered()"), self.generales)

        self.ui.toGenerales.setDefaultAction(self.aGenerales)
        self.ui.toGenerales.setIconSize(QtCore.QSize(44, 40))
        self.ui.toGenerales.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        ## Respaldos
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Redo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aRespaldos = QtGui.QAction(icon, u"Respaldos", self)
        self.aRespaldos.setCheckable(True)
        self.aRespaldos.setIconText(u"&Respaldos")
        self.connect(self.aRespaldos, QtCore.SIGNAL("triggered()"), self.respaldos)

        self.ui.toRespaldos.setDefaultAction(self.aRespaldos)
        self.ui.toRespaldos.setIconSize(QtCore.QSize(44,40))
        self.ui.toRespaldos.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        ##    Agregar respaldo
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Plus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aAgregarRespaldo = QtGui.QAction(icon, u"Crear", self)
        self.aAgregarRespaldo.setCheckable(True)
        self.aAgregarRespaldo.setIconText(u"Agregar")
        self.connect(self.aAgregarRespaldo, QtCore.SIGNAL("triggered()"), self.agregarRespaldo)

        self.ui.toAgregarRespaldo.setDefaultAction(self.aAgregarRespaldo)
        self.ui.toAgregarRespaldo.setIconSize(QtCore.QSize(44, 40))
        self.ui.toAgregarRespaldo.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        ##    Recuperar respaldo
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Undo.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aRecuperarRespaldo = QtGui.QAction(icon, u"Crear", self)
        self.aRecuperarRespaldo.setCheckable(True)
        self.aRecuperarRespaldo.setIconText(u"Recuperar")
        self.connect(self.aRecuperarRespaldo, QtCore.SIGNAL("triggered()"), self.recuperarRespaldo)

        # font.setPointSize(7)
        # self.ui.toRecuperarRespaldo.setFont(font)
        self.ui.toRecuperarRespaldo.setDefaultAction(self.aRecuperarRespaldo)
        self.ui.toRecuperarRespaldo.setIconSize(QtCore.QSize(44, 40))
        self.ui.toRecuperarRespaldo.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        ##    Eliminar respaldo
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("imagenes/Minus.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.aEliminarRespaldo = QtGui.QAction(icon, u"Eliminar", self)
        self.aEliminarRespaldo.setCheckable(True)
        self.aEliminarRespaldo.setIconText(u"Eliminar")
        self.connect(self.aEliminarRespaldo, QtCore.SIGNAL("triggered()"), self.eliminarRespaldo)

        self.ui.toEliminarRespaldo.setDefaultAction(self.aEliminarRespaldo)
        self.ui.toEliminarRespaldo.setIconSize(QtCore.QSize(44, 40))
        self.ui.toEliminarRespaldo.setToolButtonStyle(QtCore.Qt.ToolButtonTextUnderIcon)

        # self.connect(self.ui.toGenerales, QtCore.SIGNAL("clicked()"), self.generales)
        # self.connect(self.ui.toRespaldos, QtCore.SIGNAL("clicked()"), self.respaldos)

        self.ui.toSugerencias.hide()

        self.connect(self.parent(), QtCore.SIGNAL('mostrarTipsChangedBroadscast()'), self.mostrarTipsChangedBroadcast)


    #~ def muestraDialogo(self):
        #~ fileName = QtGui.QFileDialog.getExistingDirectory(self, u"Empresa Básica - Ubicación de datos", self.ui.edRuta.text(), QtGui.QFileDialog.ShowDirsOnly)
        #~ self.ui.edRuta.setText(fileName)
        #~ print fileName
        #~ self.app.config.push('properties', 'ubicacion', u'%s' % fileName)
        #~ manejador.conecta(fileName)
        # manejador.actualizaAtributo(propietario=u'sistema', nombre=u'ruta', valor=u'%s' %fileName)


    def changedNameTipoPrecio(self):
        print 1002


    def changedStateTipoPrecio(self, state):
        referencia = manejador.atributoI(id=self.sender().data).referencia
        if state:
            referencia = referencia.replace('i', 'a')
        else:
            referencia = referencia.replace('a', 'i')

        manejador.atributoI(id=self.sender().data, referencia=referencia)

        self.owner.emit(QtCore.SIGNAL('rangosPrecioChangedBroadcast()'))


    def sentidoChanged(self, checked):  # print "herramientas.Forma.sentidoChanged()"
        if self.ui.raMasMenos.isChecked():
            manejador.atributoI(grupo=u'producto', nombre=u'sentidoDeCambio', valor=u'+/-')
        elif self.ui.raMas.isChecked():
            manejador.atributoI(grupo=u'producto', nombre=u'sentidoDeCambio', valor=u'+')


    def porcentajeChanged(self, porcentaje):
        manejador.atributoI(grupo=u'producto', nombre=u'margenDeCambio', valor=u"%s" % porcentaje)


    def rangosPrecioChanged(self):
        if self.sender().isChecked():
            indicador = 'a'
        else:
            indicador = 'i'
        manejador.atributoI(id=self.sender().rango.id, referencia=self.sender().rango.referencia[0]+indicador)
        self.owner.emit(QtCore.SIGNAL('rangosPrecioChangedBroadcast()'))


    #### CUENTAS ####

    def agregaCuenta(self):
        m = "herramientas.Forma.agregaCuenta()"

        propio = manejador.rolI(tipo=u'propio')
        bancoId = self.ui.cbBanco.itemData(self.ui.cbBanco.currentIndex()).toInt()[0]
        numeroCuenta = unicode(self.ui.edCuenta.text())

        if bancoId != -1 and numeroCuenta:
            manejador.atributoRolI(rol_id=propio.id, nombre=u'cuenta', valor=unicode(numeroCuenta), referencia=unicode(bancoId))

            self.cargaCuentas()

            self.eventRouter.emit(QtCore.SIGNAL('cuentasChangedBroadcast()'))


    def cargaCuentas(self):
        propio = manejador.rolI(tipo=u'propio')
        cuentas = [x for x in propio.atributos if x.nombre==u'cuenta']
        self.ui.listaCuentas.clear()

        for index, cuenta in enumerate(cuentas):
            banco = manejador.rolI(id=int(cuenta.referencia))

            item = QtGui.QListWidgetItem("%s %s" % (cuenta.valor, banco.entidad.alias))
            item.setData(QtCore.Qt.UserRole, QtCore.QVariant(cuenta.id))
            self.ui.listaCuentas.addItem(item)


    def eliminaCuenta(self):
        m = "herramientas.Forma.eliminaCuenta()"
        cuentaId = self.ui.listaCuentas.item(self.ui.listaCuentas.currentRow()).data(QtCore.Qt.UserRole).toInt()[0]
        manejador.eliminaCuenta(cuentaId)
        self.cargaCuentas()
        self.eventRouter.emit(QtCore.SIGNAL('cuentasChangedBroadcast()'))


    def modificaCuenta(self):
        print "herramientas.Forma.modificaCuenta()"
        self.modoCapturaCuenta = u'modificar'
        if self.ui.listaCuentas.currentRow() != -1:
            item = self.ui.listaCuentas.item(self.ui.listaCuentas.currentRow())
            banco, numero = unicode(item.text()).split(' ')
            self.ui.cbBanco.setEditText(banco)
            self.ui.edCuenta.setText(numero)
            self.ui.frameCapturaCuenta.show()

        self.eventRouter.emit(QtCore.SIGNAL('cuentasChangedBroadcast()'))



    def agregaRangoPrecio(self):
        print "herramientas.Forma.agregaRangoPrecio()"
        index = len(self.ui.edRangosPrecio) - 1
        nombre = unicode(self.ui.edRangosPrecio[index].text())
        referencia = u"%s" % index
        manejador.atributoI(grupo=u'rangoPrecioProducto', nombre=nombre, referencia=referencia)
        self.ui.edRangosPrecio[index].setReadOnly(True)

    def agregaCapturaRangoPrecio(self):
        count = len(self.ui.edRangosPrecio)
        if count < 5:
            self.ui.edRangosPrecio.append(QtGui.QLineEdit(""))
            self.ui.lyNumeroRangosPrecio.addWidget(QtGui.QLabel("%s" % (count+1)))
            self.ui.lyRangosPrecio.addWidget(self.ui.edRangosPrecio[count])
            self.connect(self.ui.edRangosPrecio[count], QtCore.SIGNAL('editingFinished()'), self.agregaRangoPrecio)

    def agregarRespaldo(self):
        print "herramientas.Forma.agregarRespaldo()"

    def recuperarRespaldo(self):
        print "herramientas.Forma.recuperarRespaldo()"

    def cambiarContrasena(self):
        formaContrasena = access.FormaContrasena(app=self.app)
        result = formaContrasena.exec_()
        # formaAcceso.setData(formaContrasena.ui.edContrasena.text())

    def cambiarHerramientasMantenimiento(self):
        formaContrasena = access.FormaContrasena(app=self.app, modo=u'herramientas')
        result = formaContrasena.exec_()


    def cargaBancos(self):
        self.ui.cbBanco.clear()
        bancos = manejador.rolesI(tipo=u'banco')
        # bancos = manejador.dameBancos()
        for banco in bancos:
            self.ui.cbBanco.addItem(banco.entidad.nombre, QtCore.QVariant(banco.id))
        self.ui.cbBanco.setCurrentIndex(-1)


    def cargaTiposProducto(self):
        self.ui.cbTipoProducto.clear()
        tipos = manejador.atributosI(grupo=u'tipoProducto')
        for item in tipos:
            self.ui.cbTipoProducto.addItem(item.nombre, QtCore.QVariant(item.id))


    def changeTipoProductoDefault(self, index): # print "herramientas.Forma.changeTipo()"
        manejador.atributoI(grupo=u'tipoProducto', nombre=u'default', valor=u"%s" % self.ui.cbTipoProducto.itemData(self.ui.cbTipoProducto.currentIndex()))
        self.owner.emit(QtCore.SIGNAL('tipoProductoDefaultChangedBroadcast'))


    def cuentaCapturada(self):
        print "herramientas.Forma.cuentaCapturada()"
        f=g
        #! refactorizar
        if self.ui.cbBanco.currentText():
            if self.modoCapturaCuenta==u'agregar':
                cuentas = manejador.dameCuentas()

                if "%s %s" % (self.ui.cbBanco.currentText(), self.ui.edCuenta.text()) not in cuentas:
                    cuentas.append("%s %s" % (self.ui.cbBanco.currentText(), self.ui.edCuenta.text()))
                    manejador.ponCuentas(cuentas)
                    self.ui.listaCuentas.addItem("%s %s" % (self.ui.cbBanco.currentText(), self.ui.edCuenta.text()))
                    self.owner.emit(QtCore.SIGNAL('cuentasChangedBroadcast()'))

        self.ui.frameCapturaCuenta.hide()


    def eliminarRespaldo(self):
        print "herramientas.Forma.eliminarRespaldo()"


    def lugarDefaultChanged(self, index):
        manejador.atributoI(grupo=u'lugar', nombre=u'default', valor=u'%s' % self.ui.cbLugarDefault.itemData(self.ui.cbLugarDefault.currentIndex()).toInt()[0])


    def mostrarTipsChangedBroadcast(self):
        if manejador.atributoI(grupo=u'sistema', nombre=u'mostrarTips').valor == u"1":
            self.ui.chMostrarTips.setChecked(True)
        else:
            self.ui.chMostrarTips.setChecked(False)


    def showPath(self):
        filename = QtGui.QFileDialog.getExistingDirectory(self, u"Empresa Básica - Ubicación de documentos", self.ui.edRutaDocumentos.text(), QtGui.QFileDialog.ShowDirsOnly)
        self.ui.edRutaDocumentos.setText(filename)

        manejador.atributoI(grupo=u'sistema', nombre=u'rutaDocumentos', valor=u'%s' % filename)


    def tipoPrecioModificado(self):
        print self.sender()
        atributo = manejador.atributoI(id=self.sender().data.toInt()[0])

        atributo.nombre = unicode(self.sender().text())
        manejador.session().commit()


    def toggleCapturaActualPermitida(self, state):  # print "herramientas.Forma.toggleCapturaActualPermitida()"
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        manejador.atributoI(grupo=u'producto', nombre=u'capturaActualPermitida', valor=valor)
        self.owner.emit(QtCore.SIGNAL('capturaActualPermitidaChangedBroadcast'))


    def toggleCapturaClasificacionObligatoria(self, state): # print "herramientaas.Forma.__toggleCapturaClasificacionObligatoria()"
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        manejador.atributoI(grupo=u'producto', nombre=u'capturaClasificacionObligatoria', valor=valor)
        self.owner.emit(QtCore.SIGNAL('capturaClasificacionObligatoriaChangedBroadcast'))


    def toggleCapturaLinea(self, state):
        if state == QtCore.Qt.Checked:
            valor = u'1'
        else:
            valor = u''
        manejador.atributoI(grupo=u'producto', nombre=u'capturaLineaHabilitada', valor=valor)
        self.owner.emit(QtCore.SIGNAL('capturaLineaToggledBroadcast()'))


    def toggleCapturaPagoObligatoria(self, state):  # print "herramientas.Forma.toggleCapturaPagoObligatoria()", state
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        manejador.atributoI(grupo=u'venta', nombre=u'capturaPagoObligatoria', valor=valor)
        self.owner.emit(QtCore.SIGNAL('capturaPagoObligatoriaChanged'))


    def toggleContrasenaHerramientas(self, state):
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        manejador.atributoI(grupo=u'sistema', nombre=u'contrasenaHerramientas', valor=valor)
        if not self.ui.chContrasenaHerramientas.isChecked() and not self.ui.chContrasenaMantenimiento.isChecked():
            self.ui.boHerramientasMantenimiento.setEnabled(False)
        else:
            self.ui.boHerramientasMantenimiento.setEnabled(True)


    def toggleContrasenaMantenimiento(self, state):
        print "herramientas.Forma.toggleContrasenaMantenimiento(%s)" % state
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        manejador.atributoI(grupo=u'sistema', nombre=u'contrasenaMantenimiento', valor=valor)
        if not self.ui.chContrasenaHerramientas.isChecked() and not self.ui.chContrasenaMantenimiento.isChecked():
            self.ui.boHerramientasMantenimiento.setEnabled(False)
        else:
            self.ui.boHerramientasMantenimiento.setEnabled(True)


    def toggleMostrarTips(self, state):             # print "herramientas.Forma.toggleMostrarTips()", state
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        manejador.atributoI(grupo=u'sistema', nombre=u'mostrarTips', valor=valor)
        # self.owner.emit(QtCore.SIGNAL('mostrarTipsChanged()'))


    def toggleProteccionF10(self, state):
        m = "herramientas.Forma.toggleProteccionF10()"
        print (1), m

        print state, QtCore.Qt.Checked
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""
        print valor
        manejador.atributoI(grupo=u'sistema', nombre=u'proteccionF10', valor=valor)
        self.owner.emit(QtCore.SIGNAL('proteccionF10Changed()'))


    def toggleRecalcular(self, checked):
        if checked:
            manejador.atributoI(grupo=u'producto', nombre=u'recalcularPrecioAlComprar', valor=u'1')
        else:
            manejador.atributoI(grupo=u'producto', nombre=u'recalcularPrecioAlComprar', valor=u'0')


    def toggleSeImprimeComprobante(self, state):
        if state == QtCore.Qt.Checked:
            valor = u"1"
        else:
            valor = u""

    def toggleUsarCodigoSecundario(self, state):
        if state == QtCore.Qt.Checked:
            valor = u'1'
        else:
            valor = u''
        manejador.atributoI(grupo=u'producto', nombre=u'usarCódigoSecundario', valor=valor)
        self.owner.emit(QtCore.SIGNAL('usarCodigoSecundarioChangedBroadcast()'))

    def generales(self):
        self.ui.stack.setCurrentIndex(0)


    def respaldos(self):
        self.ui.stack.setCurrentIndex(1)




